/**
 * 指定时间间隔内再次触发，重新计时
 * 使用场景：
 * 搜索
 * @param {*} fn 被限制调用的函数
 * @param {*} delay 间隔时间
 * @returns 
 */
function debounce(fn, delay) {
    let timer
    return function (...args) {
      if (timer) {
        clearTimeout(timer)
      }
      timer = setTimeout(() => {
        fn.apply(this, args)
      }, delay)
    }
  }
  
  // 测试
  function task(index) {
    console.log('run task',index)
  }
  const debounceTask = debounce(task, 1000)
  debounceTask(1)
  debounceTask(2)
  setTimeout(()=>{
    debounceTask(3)
  },1000)
  setTimeout(()=>{
    debounceTask(4)
  },1100)
  //2
  //4